Amazon Connect API で TooManyRequestsException のスロットリングエラーが発生する場合の対処方法
困っていた内容
StartOutboundVoiceContact API をプログラムから同時実行したところ、以下のエラーメッセージが表示されました。
An error occurred (TooManyRequestsException) when calling the StartOutboundVoiceContact operation
TooManyRequestsException のエラーを解消する方法を教えてください。
どう対応すればいいの?
定常的に、Amazon Connect API をクォータを超えて呼び出す必要がある場合、該当のAPI のレート制限の上限緩和申請を行ってください。
上限緩和を行うことで、レート制限以下の API 呼び出しであれば、スロットリングを回避することができます。
Amazon Connect API スロットリングのクォータ
API | レートリミット | バーストリミット | 上限緩和可否 |
---|---|---|---|
GetMetricData および GetCurrentMetricData | 1 秒 5 リクエスト | 1 秒あたり 8 リクエスト | 不可 |
その他(StartOutboundVoiceContact など) | 1 秒 2 リクエスト | 1 秒あたり 5 リクエスト | 可 |
Amazon Connect API のスロットリングのクォータは、デフォルトだと上記表のような制限値となっています。
上記の呼び出し制限に抵触すると、TooManyRequestsException のスロットリングエラーが発生します。
運用観点での回避策
前述の回避方法である上限緩和申請は、定常的な API 呼び出しの際に発生したスロットリングへ対応することはできます。
しかしながら、局所的な需要増加により API の呼び出しが急増した場合には、上限緩和では対応できない場合があります。
その場合は、以下の方法で回避することも可能です。
- 回避方法
- リクエスト再試行
- エクスポネンシャルバックオフ
- キューイング
- SQS + Lambda, SQS + ECS(Fargate) などの構成
- リクエスト再試行
エクスポネンシャルバックオフは、スロットリングが発生した場合のおなじみの回避方法ですが、キューイングで非同期的に急増したリクエストを処理していく方法もあります。
今後の需要増加に対応できるようにユースケースに沿った回避方法を選択できると、運用観点で安心できると思います。